package lbtest;
import lbtest.Person;

// Java只允许一个class继承自一个类，因此，一个类有且仅有一个父类。只有Object特殊，它没有父类。
// 继承有个特点，就是子类无法访问父类的private字段或者private方法  用protected修饰的字段可以被子类访问
// final关键字  阻止继承
// 一个.java文件只能包含一个public类，但可以包含多个非public类。
public final class Student extends Person {

    /** 构造方法的继承 */
    // 子类不会继承任何父类的构造方法。子类默认的构造方法是编译器自动生成的，不是继承的
    public Student(String name, int age) {
        super(name, age);
        super.name = name;
    }

    public Student(String name) {
        this(name, 18); // 调用另一个构造方法Person(String, int)
    }

    /** super */
    // 使用super调用父类的方法或属性
    public String getStdName()
    {
        return super.name;
    }

    /** 多态 */
    // 重写父类方法 加上@Override可以让编译器帮助检查是否进行了正确的覆写。希望进行覆写，但是不小心写错了方法签名，编译器会报错。但是@Override不是必需的。
    // 多态是指，针对某个类型的方法调用，其真正执行的方法取决于运行时期实际类型的方法。

    // 所有的class最终都继承自Object，而Object定义了几个重要的方法：
    // toString()：把instance输出为String；
    // equals()：判断两个instance是否逻辑相等；
    // hashCode()：计算一个instance的哈希值。
    // 在必要的情况下，我们可以覆写Object的这几个方法

    @Override
    public void mulFunc() {
        System.out.println("子类方法mulFunc");
    }

}